package com.jiugang.cardump.util;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;



/**
 *  运行此方法生成mybatis代码
 *  生成代码自动放入对应目录
 * @author wangshu
 * @create 2019/10/18
 */

public class MysqlGenerator {
    //数据库连接参数
    public static String driver = "com.mysql.cj.jdbc.Driver";
    public static String url = "jdbc:mysql://localhost:3306/car_dumper?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false";
    public static String username="root";
    public static String password="lx990707";
    // 父级别包名称(看个人创建的目录)
    public static String parentPackage = "com.jiugang.cardump";
    // 代码生成的目标路径
    public static String generateTo = "/src/main/java";
    // mapper.xml的生成路径
    public static String mapperXmlPath = "/src/main/resources/mapper";
    // 控制器的公共基类，用于抽象控制器的公共方法，null值表示没有父类
    public static String baseControllerClassName ;
    // 业务层的公共基类，用于抽象公共方法
    public static String baseServiceClassName ;
    // 作者名
    public static String author = "author";
    // 模块名称，用于组成包名(这块看个人需要是否再加一级目录)
    // public static String modelName = "portal";

    // 执行 main 自动生成对应项目目录中
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        // 当前工程目录模块
        String projectPath = System.getProperty("user.dir");
        // 文件输出目录(generateTo为上面定义的路径)
        gc.setOutputDir(projectPath + generateTo);
        // 添加作者信息
        gc.setAuthor(author);
        //设置时间类型为Date
        gc.setDateType(DateType.TIME_PACK);
        // 生成文件后不默认打开
        gc.setOpen(false);
        // 自定义service生成的名字，用于删除自动生成的I前缀
        gc.setServiceName("%sService");
        // 实体属性 Swagger2 注解，在这里没有需求，就默认注释了
        // gc.setSwagger2(true);
        gc.setBaseResultMap(true);
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(url);
        // dsc.setSchemaName("public");
        dsc.setDriverName(driver);
        dsc.setUsername(username);
        dsc.setPassword(password);
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        // pc.setModuleName(scanner("模块名"));
        // 父模块，已在上方定义
        pc.setParent(parentPackage);
        // 各个包目录起名
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        mpg.setPackageInfo(pc);


        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 字段驼峰命名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        // 设置实体类的lombok(此处看个人使用，如果不使用lombok，那么在生成之后再去添加构造方法等等)
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 公共父类
        // strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
        // 写于父类中的公共字段
        // strategy.setSuperEntityColumns("id");

        // scanner("表名，多个英文逗号分割").split(",")
        strategy.setInclude(("cardumper_alert,cardumper_equipment,cardumper_monitor,cardumper_pro,cardumper_pro_equ_ref,cardumper_user").split(","));
        // 驼峰生成方法
        strategy.setControllerMappingHyphenStyle(true);
        // 删除前缀
        strategy.setTablePrefix("cardumper_");
        mpg.setStrategy(strategy);
//         mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}